package Interprete.maquinaP;

/**La clase Elem representa un dato con su valor y su tipo (natural, entero, real, caracter, booleano (String verdadero o falso))
 * y a su vez sirve para indicar a las instrucciones como apila-dir y desapila-dir la direccion de memoria a la cual tienen que acceder
 * y el tipo del dato que contiene
 */

public class Elem {
	private String tipo;
	private Object valor;
	
	public Elem (){
		this.setTipo(null);
		this.setValor(null);
	}
	/**
	 * 
	 * @param tipo: String
	 */
	public Elem(String tipo){
		this.setTipo(tipo);
		this.setValor(null);
	}
	/**
	 * 
	 * @param tipo: String
	 * @param valor: Object
	 */
	public Elem(String tipo, Object valor){		
		this.setTipo(tipo);
		this.setValor(valor);
	}
	/**
	 * 
	 * @return tipo: String
	 */
	public String getTipo() {
		return tipo;
	}
	/**
	 * 
	 * @param tipo: String
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	/**
	 * 
	 * @return valor: Object
	 */
	public Object getValor() {
		return valor;
	}
	/**
	 * 
	 * @param valor: Object
	 */
	public void setValor(Object valor) {
		this.valor = valor;
	}	
	
	public String toString(){
        String valorString;
		if(tipo.equals("caracter"))        	
			//valorString = "'" + (char)valor + "'";
			valorString = "" + (Character)valor;
        else if(tipo.equals("booleano"))        	
        	if((Boolean)valor)
        		valorString = "verdadero";
        	else
        		valorString = "falso";
        else if(tipo.equals("entero")||tipo.equals("natural")) 	
        	valorString = String.valueOf((Integer)valor); 
        else
        	valorString = String.valueOf((Double)valor);
		//return "("+ tipo + ", " + valorString + ")";
		return valorString;
	}
}
